package com.wjm.api.ExceptionPackage;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * Data:2022年07月11日
 * Author:wjm
 * Content: IO异常处理机制
 *
 *
 * Throwable 类是 Java 语言中所有错误或异常的超类。
 * 只有当对象是此类（或其子类之一）的实例时，才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地，只有此类或其子类之一才可以是 catch 子句中的参数类型
 *
 *  Throwable 类中常用API
 *           Throwable getCause()    返回此 throwable 的 cause；如果 cause 不存在或未知，则返回 null
 *           String getMessage()     返回此 throwable 的详细消息字符串(返回的异常类)
 *           void printStackTrace()  将此 throwable 及其追踪输出至标准错误流。
 *
 */
public class HandleException {
    public static void main(String[] args) {
        /*
        * jdk1.7之前
        *
        * 在处理IO异常时需要进行关流操作，同时在关流时，说不定还要在进行异常异常捕获
        * 同时变量的申明需要在捕获开始之前就声明，赋值的操作是在try{}中
        *
        * */
        FileReader r=null;
        try {
            r = new FileReader("a1.txt");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("-----------------");
            System.out.println(e.getMessage());
            System.out.println("-----------------");
            System.out.println(e.getCause());//是因为当前异常是因为file找不到引起的并非异常类引起的所以是null
        }finally {
            try {
                r.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        /*
        * jdk1.7之后
        *
        * 在处理IO异常时不需要进行关流操作，它有一个自动关流的操作(auto-close)
        * 并且它的变量的声明和赋值是写在try()中的，而try(){}中可以写流的操作
        * */
        try (
                FileWriter w = new FileWriter("a.txt");
                FileReader r1 = new FileReader("a.txt")
        ){
            int a=r1.read();
            System.out.println(a);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
